<?php

/**
 * Permet la recherche d'informations sur les régions, les départements et les villes
 */
class Lieux
{
    // Attributs
    private $_regions, $_departements, $_villes;

    /**
     * Constructeur : charge les données en provenance des fichiers JSON
     */
    public function __construct()
    {
        $this->_regions         = json_decode(file_get_contents('inc/datas/region.json'));
        $this->_departements    = json_decode(file_get_contents('inc/datas/departement.json'));
        $this->_villes          = json_decode(file_get_contents('inc/datas/ville.json'));
    }

    /**
     * Récupère la liste des régions ou une région en fonction de son id
     * @param unsigned $id L'id de la région
     * @return mixed $data Les données de la région
     */
    public function getRegion($id = null)
    {
        if ($id !== null && $id > 0) {
            foreach ($this->_regions as $reg) {
                if ($id == $reg[0]) {
                    $data = $reg;
                    break;
                }
            }
        } else {
            $data = $this->_regions;
        }
        
        return $data;
    }

    /**
     * Récupère la liste des départements ou un département en fonction de son id
     * @param unsigned $id L'id du département
     * @param bool $withDep Si les départements sont inclus dans la recherche
     * @return mixed $data Les données du département
     */
    public function getDepartement($id = null, $withDep = false)
    {
        $data = array();
        if ($id !== null && $id > 0) {
            foreach($this->_departements as $dep) {
                if ($id == $dep[0]) {
                    $data = $dep;
                    break;
                }
            }
            if ($withDep != false) {
                $data[1] = $this->getRegion($data[1]);
            }
        } else {
            $data = $this->_departements;
            if ($withDep != false) {
                foreach($data as $k => $d){
                    $d[1] = $this->getRegion($d[1]);
                    $data[$k] = $d;
                }
            }
        }

        return $data;
    }

    /**
     * Liste les départements d'une région en fonction de son id
     * @param unsigned $id L'id d'une région
     * @return array $departements Liste des départements de cette région
     */
    public function getDepartementByRegionID($id)
    {
        $departements = array();
        foreach ($this->_departements as $dep) {
            if ($id == $dep['1']) {
                $departements[] = $dep;
            }
        }
        return $departements;
    }

    /**
     * Liste les villes d'un département en fonction de son id
     * @param unsigned $id L'id d'un département
     * @return array $ville Liste des villes de ce département
     */
    public function getVilleByDepartementID($id)
    {
        $villes = array();
        foreach ($this->_villes as $vi) {
            if ($id == $vi['1']) {
                $villes[] = $vi;
            }
        }
        return $villes;
    }

    /**
     * Récupère la liste des villes ou une ville en fonction de son id
     * @param unsigned $id L'id de la ville
     * @param bool $withDep Si les départements sont inclus dans la recherche
     * @return mixed $data Les données de la ville
     */
    public function getVille($id = null, $withDep = false)
    {
        if ($id !== null && $id > 0) {
            $data = $this->_villes[$id - 1];
            
            if ($withDep !== false) {
                $data[1] = $this->getDepartement($data[1], $withDep);
            }
        } else {
            $data = $this->_villes;
        }
        
        return $data;
    }
}


/* -- Fin du fichier -- */